
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>MESI缓存一致性协议 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>MESI缓存一致性协议 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">MESI协议的全称是什么？它在多核处理器系统中的核心作用是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">MESI协议全称为“Modified, Exclusive, Shared, Invalid”（修改、独占、共享、无效）。其核心作用是作为一种缓存一致性协议，用于确保多个处理器核心在访问共享内存时，各自缓存中的数据能够保持一致。</div>
          </div>
          <div class="card-source">来源: 文档引言部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">在MESI协议中，“Modified”（修改态）的三个关键特征是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 缓存行中的数据已被修改，与主存数据不一致。<br>2. 数据仅存在于当前处理器的缓存中，其他处理器没有该数据。<br>3. 在写回主存前，若其他处理器请求该数据，当前处理器需先将数据写回主存。</div>
          </div>
          <div class="card-source">来源: 1. MESI协议的四种状态 - Modified（M，修改态）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">MESI协议中的“Exclusive”（独占态）和“Shared”（共享态）有何异同？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">相同点是，在这两种状态下，缓存中的数据都未被修改且与主存数据一致。不同点是，“独占态”（E）表示数据仅存在于当前处理器的缓存中；而“共享态”（S）表示数据可以同时存在于多个处理器的缓存中。</div>
          </div>
          <div class="card-source">来源: 1. MESI协议的四种状态</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">当一个处理器的缓存行处于“Shared”（共享态）时，如果它想对该数据进行写操作，会触发怎样的状态转换和通信过程？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当处理器想对处于“共享态”（S）的数据进行写操作时，它必须首先通知其他拥有该数据副本的处理器，将其副本状态设置为“无效态”（I）。完成此操作后，当前处理器缓存行的状态会从“共享态”（S）转换为“修改态”（M）。</div>
          </div>
          <div class="card-source">来源: 2. MESI协议的操作与状态转换 - 写操作</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">在MESI协议中，一个处于“Invalid”（无效态）的缓存行在执行读操作时，是如何转换到“Exclusive”（独占态）或“Shared”（共享态）的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">如果其他处理器缓存中没有该数据的副本，当前处理器会从主存加载数据，并将状态设为“独占态”（E）。如果其他处理器有该数据的副本，当前处理器将从其他处理器获取数据副本，并将状态转为“共享态”（S）。</div>
          </div>
          <div class="card-source">来源: 2. MESI协议的操作与状态转换 - 读操作</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">MESI协议依赖于处理器间的通信，请解释BusRdX（总线独占读取）和BusUpgr（总线升级）这两种总线事务的作用。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">BusRdX（总线独占读取）是当处理器需要修改数据时发起的事务，用以通知其他处理器将其缓存中的数据副本设为无效态。BusUpgr（总线升级）是当处理器想写入处于共享态（S）的数据时发起的事务，同样用于通知其他处理器无效其数据副本。</div>
          </div>
          <div class="card-source">来源: 3. 处理器间通信与总线事务</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">MESI协议作为一种缓存一致性协议，其主要优势体现在哪两个方面？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">MESI协议的主要优势体现在两个方面：<br>1. **数据一致性**：能有效保证多核环境下数据的一致性，防止脏数据传播。<br>2. **缓存效率**：通过精细的状态管理，减少了不必要的处理器间通信开销，提高了缓存的使用效率。</div>
          </div>
          <div class="card-source">来源: 4. MESI协议的优势与挑战 - 优势</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">尽管MESI协议有很多优势，但它也面临着哪些主要挑战？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">MESI协议面临的主要挑战包括：<br>1. **复杂性**：协议的状态管理和处理器间通信逻辑增加了系统设计的复杂性，尤其是在处理高并发下的竞争条件时。<br>2. **性能开销**：在某些场景下（如频繁的写操作），维持一致性所需的状态转换和总线事务仍然会带来一定的性能开销。</div>
          </div>
          <div class="card-source">来源: 4. MESI协议的优势与挑战 - 挑战</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">当一个缓存行处于“Exclusive”（独占态）时，处理器执行写操作为何无需与其他处理器通信？写操作后状态会如何变化？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">因为在“独占态”（E）下，数据仅存在于当前处理器的缓存中，所以处理器可以直接写入数据而无需通知其他处理器。发生写操作后，该缓存行的状态会立即从“独占态”（E）转变为“修改态”（M）。</div>
          </div>
          <div class="card-source">来源: 1. MESI协议的四种状态 - Exclusive（E，独占态）</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
